# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: "http://devicetree.org/schemas/remoteproc/fsl,imx-rproc.yaml#"
$schema: "http://devicetree.org/meta-schemas/core.yaml#"

title: NXP i.MX Co-Processor

description:
  This binding provides support for ARM Cortex M4 Co-processor found on some NXP iMX SoCs.

maintainers:
  - Peng Fan <peng.fan@nxp.com>

properties:
  compatible:
    enum:
      - fsl,imx6sx-cm4
      - fsl,imx7d-cm4
      - fsl,imx7ulp-cm4
      - fsl,imx8mm-cm4
      - fsl,imx8mn-cm7
      - fsl,imx8mp-cm7
      - fsl,imx8mq-cm4
      - fsl,imx8qm-cm4
      - fsl,imx8qxp-cm4
      - fsl,imx8ulp-cm33
      - fsl,imx93-cm33

  clocks:
    maxItems: 1

  syscon:
    $ref: /schemas/types.yaml#/definitions/phandle
    description:
      Phandle to syscon block which provide access to System Reset Controller

  mbox-names:
    items:
      - const: tx
      - const: rx
      - const: rxdb

  mboxes:
    description:
      This property is required only if the rpmsg/virtio functionality is used.
      List of <&phandle type channel> - 1 channel for TX, 1 channel for RX, 1 channel for RXDB.
      (see mailbox/fsl,mu.yaml)
    minItems: 1
    maxItems: 3

  memory-region:
    description:
      If present, a phandle for a reserved memory area that used for vdev buffer,
      resource table, vring region and others used by remote processor.
    minItems: 1
    maxItems: 32

  power-domains:
    maxItems: 8

  fsl,auto-boot:
    $ref: /schemas/types.yaml#/definitions/flag
    description:
      Indicate whether need to load the default firmware and start the remote
      processor automatically.

  fsl,entry-address:
    $ref: /schemas/types.yaml#/definitions/uint32
    description:
      Specify CPU entry address for SCU enabled processor.

  fsl,resource-id:
    $ref: /schemas/types.yaml#/definitions/uint32
    description:
      This property is to specify the resource id of the remote processor in SoC
      which supports SCFW

required:
  - compatible

additionalProperties: false

examples:
  - |
    #include <dt-bindings/clock/imx7d-clock.h>
    m4_reserved_sysmem1: cm4@80000000 {
      reg = <0x80000000 0x80000>;
    };

    m4_reserved_sysmem2: cm4@81000000 {
      reg = <0x81000000 0x80000>;
    };

    imx7d-cm4 {
      compatible	= "fsl,imx7d-cm4";
      memory-region	= <&m4_reserved_sysmem1>, <&m4_reserved_sysmem2>;
      syscon		= <&src>;
      clocks		= <&clks IMX7D_ARM_M4_ROOT_CLK>;
    };

  - |
    #include <dt-bindings/clock/imx8mm-clock.h>

    imx8mm-cm4 {
      compatible = "fsl,imx8mm-cm4";
      clocks = <&clk IMX8MM_CLK_M4_DIV>;
      mbox-names = "tx", "rx", "rxdb";
      mboxes = <&mu 0 1
                &mu 1 1
                &mu 3 1>;
      memory-region = <&vdev0buffer>, <&vdev0vring0>, <&vdev0vring1>, <&rsc_table>;
      syscon = <&src>;
    };
...
